using System;
using System.Collections.Generic;

namespace CSharpPro
{
    // 用户管理类：封装登录、注册及校验逻辑
    public static class UserManager
    {
        // 静态集合：存储所有注册用户（程序运行期间有效）
        private static readonly List<User> _registeredUsers = new List<User>();

        // 注册功能
        public static void Register()
        {
            Console.WriteLine("\n=== 用户注册 ===");
            string username = GetValidUsername();
            string password = GetValidPassword();
            string confirmPwd = GetConfirmPassword(password);

            _registeredUsers.Add(new User { Username = username, Password = password });
            Console.WriteLine("注册成功！");
        }

        // 登录功能
        public static void Login()
        {
            Console.WriteLine("\n=== 用户登录 ===");
            Console.Write("用户名：");
            string username = Console.ReadLine()?.Trim() ?? "";
            Console.Write("密码：");
            string password = Console.ReadLine()?.Trim() ?? "";

            if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password))
            {
                Console.WriteLine("用户名/密码不能为空！");
                return;
            }

            var user = _registeredUsers.Find(u => u.Username == username && u.Password == password);
            if (user != null)
                Console.WriteLine("登录成功！");
            else
                Console.WriteLine("用户名不存在或密码错误！");
        }

        // 用户名合法性校验（辅助方法）
        private static string GetValidUsername()
        {
            Console.Write("请输入用户名（3-15字符，含字母/数字/下划线）：");
            string username = Console.ReadLine()?.Trim() ?? "";

            if (string.IsNullOrEmpty(username))
            {
                Console.WriteLine("不可为空！");
                return GetValidUsername();
            }
            if (username.Length < 3 || username.Length > 15)
            {
                Console.WriteLine("长度需为3-15字符！");
                return GetValidUsername();
            }
            if (!System.Text.RegularExpressions.Regex.IsMatch(username, @"^[a-zA-Z0-9_]+$"))
            {
                Console.WriteLine("仅支持字母、数字、下划线！");
                return GetValidUsername();
            }
            if (_registeredUsers.Exists(u => u.Username == username))
            {
                Console.WriteLine("用户名已存在！");
                return GetValidUsername();
            }

            return username;
        }

        // 密码合法性校验（辅助方法）
        private static string GetValidPassword()
        {
            Console.Write("请输入密码（6-20字符，含大小写字母+数字）：");
            string password = Console.ReadLine()?.Trim() ?? "";

            if (string.IsNullOrEmpty(password))
            {
                Console.WriteLine("不可为空！");
                return GetValidPassword();
            }
            if (password.Length < 6 || password.Length > 20)
            {
                Console.WriteLine("长度需为6-20字符！");
                return GetValidPassword();
            }
            if (!System.Text.RegularExpressions.Regex.IsMatch(password, @"^(?=.*[A-Z])(?=.*[a-z])(?=.*\d).+$"))
            {
                Console.WriteLine("需包含大写字母、小写字母和数字！");
                return GetValidPassword();
            }

            return password;
        }

        // 确认密码校验（辅助方法）
        private static string GetConfirmPassword(string originalPwd)
        {
            Console.Write("确认密码：");
            string confirmPwd = Console.ReadLine()?.Trim() ?? "";

            if (confirmPwd != originalPwd)
            {
                Console.WriteLine("两次密码不一致！");
                return GetConfirmPassword(originalPwd);
            }
            return confirmPwd;
        }
    }

    // 用户实体类：存储用户名和密码
    public class User
    {
        public string Username { get; set; }
        public string Password { get; set; }
    }
}

